package cqrtplm.mapper;

import com.alibaba.fastjson.JSONObject;
import com.hustcad.plm.pdm.partbom.dto.PartUsageLink;
import com.ty.basic.entity.org.OrgDO;
import com.ty.basic.entity.part.PartDO;
import com.ty.basic.entity.part.PartMasterDO;
import com.ty.basic.entity.part.PartUsageLinkDO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.math.BigInteger;
import java.util.List;

@Repository

public interface RTChangeMapper {

    List<JSONObject> queryMaterialCode(@Param("partNumber") String partNumber, @Param("type") String type, @Param("view") String view);

    List<JSONObject> queryPatternOrMaterialCode(@Param("partNumber") String partNumber, @Param("type") String type, @Param("view") String view);

    List<JSONObject> queryParentPartByType(@Param("partNumber") String partNumber, @Param("type") String type, @Param("view") String view);

    String queryIBAValue(@Param("oid") String oid, @Param("ibaName") String ibaName);

    //根据Oid查询PartUsageLink
    PartUsageLinkDO queryPartUsageLinkByOid(@Param("oid") String oid);

    //根据oid otype 和属性名称查询iba属性值
    String queryIBAValueByOidAndOtype(@Param("oid") String oid, @Param("otype") String otype, @Param("attributeName") String attributeName);

    JSONObject queryMaterialByCodeAndType(@Param("partNumber") String partNumber, @Param("type") String type, @Param("view") String view);

    List<JSONObject> queryParentPart(@Param("partNumber") String partNumber, @Param("view") String view);

    //根据物料码获取最新物料
    JSONObject queryLatestMaterialByCode(@Param("partNumber") String partNumber, @Param("view") String view);
    //根据图纸编码获取最新版本的图纸对象
    JSONObject queryLatestCADDocByCode(@Param("docNumber") String docNumber);
    //根据物料码获取次新大版本物料
    JSONObject querySecLatestMaterialByCode(@Param("partnumber") String partnumber, @Param("view") String view);

    //根据物料码和版本获取物料
    List<JSONObject> queryMaterialByCodeAndVersion(@Param("partnumber") String partnumber, @Param("version") String version, @Param("iteration") String iteration, @Param("view") String view);
    //根据物料码和版本获取图文档
    List<JSONObject> queryDrawDocByCodeAndVersion(@Param("table1") String table1, @Param("table2") String table2, @Param("docnumber") String docnumber, @Param("version") String version);

    //判断对象是否最新大版本的最新小版本
    int judgeObjectIsLatest(@Param("tableName") String tableName, @Param("oid") String oid);

    //判断对象是否最新大版本的最新小版本
    int judgeCheckOut(@Param("tableName") String tableName, @Param("oid") String oid);

    //判断对象是否最新大版本的最新小版本
    int judgeWorkCopy(@Param("tableName") String tableName, @Param("oid") String oid);

    //根据OID查询对象
    JSONObject getObjectByOid(@Param("tableName") String tableName, @Param("oid") String oid);

    //根据OID查询对象
    JSONObject getObjectJsonByOid(@Param("tableName1") String tableName1, @Param("tableName2") String tableName2, @Param("objNumber") String objNumber, @Param("oid") String oid);

    //根据对象OID查询子件-->
    List<PartDO> queryChildPart(@Param("oid") String oid, @Param("view") String view);

    //根据父子id查询扩展属性
    @Select("  SELECT * FROM ty_partusagelink WHERE aoid = TO_NUMBER(#{aoid}) AND boid = TO_NUMBER(#{boid})")
    List<PartUsageLink> queryPartUsageLinkInfo(@Param("aoid") String aoid, @Param("boid") String boid);

    JSONObject getObjectByNumber(@Param("tableOne") String tableOne, @Param("tableTwo") String tableTwo, @Param("column") String column, @Param("number") String number);

    List<PartDO> queryPartByType(@Param("type") String type);

    List<JSONObject> queryProductCodeByIBA(@Param("partNumber") String partNumber, @Param("CustomerCode") String CustomerCode, @Param("devCode") String devCode, @Param("productType") String productType, @Param("type") String type);

    @Select("select OID from TY_PJ_CHANGEINFO WHERE CHANGENO=#{workFlowContainerId}")
    BigInteger queryChangeId(String workFlowContainerId);

    /**
     * 根据用户oid获取用户所属部门
     *
     * @param oid
     * @return
     */
    List<OrgDO> getOrgByUserOid(@Param("oid") String oid);

    /**
     * 根据机组成品码、视图、类型内部名称获取动力成品码
     *
     * @param code
     * @param view
     * @param type
     * @return
     */
    List<PartMasterDO> getChildProductCode(@Param("code") String code, @Param("type") String type, @Param("view") String view);

    /**
     * 根据编码判断是否存在父子关系
     *
     * @param parent
     * @param child
     * @param view
     * @return
     */
    List<JSONObject> judgeChildAndParentRelation(@Param("parent") String parent, @Param("child") String child, @Param("view") String view);

    /**
     * 根据编码和类型模糊匹配零件编码
     *
     * @param partNumber
     * @param type
     * @param view
     * @return
     */
    List<JSONObject> queryPartNumberByType(@Param("partNumber") String partNumber, @Param("type") String type, @Param("view") String view);
}